<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>js 闭包</title>
	</head>
	<body>
		<p>闭包是 JavaScript 中最强大的抽象概念之一</p>
		<p>当调用 makeAdder 时，解释器创建了一个作用域对象，它带有一个属性：a，这个属性被当作参数传入 makeAdder 函数。然后 makeAdder 返回一个新创建的函数（该匿名函数暂记为
			adder）。通常，JavaScript 的垃圾回收器会在这时回收 makeAdder 创建的作用域对象（暂记为 b），但是，makeAdder 的返回值，新函数 adder，拥有一个指向作用域对象 b
			的引用。最终，作用域对象 b 不会被垃圾回收器回收，直到没有任何引用指向新函数 adder</p>

		<script type="text/javascript">
			function makeAdder(a) {
				return b => {
					return a + b;
				}
			}

			var adder1 = makeAdder(3);
			var adder2 = makeAdder(20);
			alert(adder1(9)); // 12
			alert(adder2(5)); // 25
		</script>
	</body>
</html>
